package daoimpl;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.Stateless;

import dao.ConcoursPizzaDao;
import domaine.ApprentiPizzaiolo;
import domaine.ConcoursPizza;
import domaine.ConcoursPizza.EtatConcours;
import domaine.PlateauPizza;

@Stateless
public class ConcoursPizzaDaoImpl extends DaoImpl<Integer, ConcoursPizza>
		implements ConcoursPizzaDao {

	@Override
	public List<ConcoursPizza> listeConcoursNonFini() {
		return this.liste("SELECT c FROM " + ConcoursPizza.class.getName()
				+ " c WHERE c.etatConcours <> ?1", EtatConcours.FINI);
	}

	@Override
	public ConcoursPizza chargerTout(int idConcours) {
		ConcoursPizza concours = this.rechercher(idConcours);
		for (PlateauPizza unPlateau : concours.getPlateauxApprentis().values())
			unPlateau.getCasesRemplies().size();

		return concours;
	}

	@Override
	public ConcoursPizza chargerPlateauxApprentis(int idConcours,
			ApprentiPizzaiolo apprentiPizzaiolo) {

		ConcoursPizza concours = this.rechercher(idConcours);
		concours.getPlateauxApprentis().get(apprentiPizzaiolo);

		return concours;
	}

	@Override
	public ConcoursPizza rechercherConcours(String nomConcours) {
		return this.recherche("SELECT c FROM " + ConcoursPizza.class.getName()
				+ " c WHERE c.nomConcours = ?1", nomConcours);
	}

	@Override
	public List<ConcoursPizza> listeConcoursNonFini(ApprentiPizzaiolo apprenti) {
		// Bug voir https://hibernate.atlassian.net/browse/HHH-5396
		// return this
		// .liste("SELECT c FROM "
		// + ConcoursPizza.class.getName()
		// +
		// " c JOIN c.plateauxApprentis WHERE KEY(c.plateauxApprentis).pseudo = ?1",
		// "a");

		List<ConcoursPizza> liste = this.listeConcoursNonFini();

		for (ConcoursPizza concours : new ArrayList<ConcoursPizza>()) {
			if (!concours.getPlateauxApprentis().containsKey(apprenti)) {
				liste.remove(concours);
			}
		}

		return liste;

	}

}